﻿//table的处理
function ControlTable(obj) {
    //增加一行,带此行tr的样式，允许css为空
    this.AddTr = function (arrHtml, css) {

        var tempCellCount = $(obj).find("tr:eq(0)").find("td").length;
        var tempTrCount = $(obj).find("tr").length;

        var bl = ControlCells(arrHtml, tempCellCount);

        if (bl) {
            var oneRow = $(obj).get(0).insertRow();
            if (css != "") {
                $(oneRow).attr("class", css);
            }
            for (var i = 0; i < arrHtml.length; i++) {
                var _cell = oneRow.insertCell(i);
                _cell.innerHTML = arrHtml[i];
            }
        }
        else {
            return;
        }
    }

    //单纯的添加一行
    this.AddTrNoCell = function () {
        return $(obj).get(0).insertRow();
    }

    //在指定的位置添加一行  索引从0开始
    this.AddTrByIndex = function (arrHtml, index) {

        var tempCellCount = $(obj).find("tr:eq(0)").find("td").length;
        var tempTrCount = $(obj).find("tr").length;

        var bl = ControlCells(arrHtml, tempCellCount);
        var bl1 = ControlIndex(index, tempTrCount);

        if (bl1) {
            if (bl) {
                //获取现有的所有tr对象,并且填充到数组
                var arrTrObj = new Array();
                $(obj).find("tr").each(function () {
                    arrTrObj.push($(this));
                    //删除所有的tr
                    $(this).remove();
                })

                //新的tr对象
                var oneRow = $(obj).get(0).insertRow();
                for (var i = 0; i < arrHtml.length; i++) {
                    var _cell = oneRow.insertCell(i);
                    _cell.innerHTML = arrHtml[i];
                }

                //根据index 数组里的TR对象重新排序
                arrTrObj.splice(index, 0, oneRow);

                //重新添加到table
                for (var i = 0; i < arrTrObj.length; i++) {
                    $(obj).append(arrTrObj[i]);
                }
            }
            else {
                return;
            }
        } else {
            return;
        }
    }

    //删除指定行  索引从0开始
    this.DeleteTrByIndex = function (index) {
        var tempTrCount = $(obj).find("tr").length;
        var bl = ControlIndex(index, tempTrCount);
        if (bl) {
            var temp = GetTrByIndex(obj, index);
            if (temp != null) {
                $(temp).remove();
            }
            else {
                alert("超出索引!");
            }
        }
        else {
            return;
        }
    }

    //隐藏一个table的index列
    this.hidcols = function (index) {
        var trs = $(obj).find("tr");
        for (var i = 0; i < trs.length; i++) {
            $(trs[i]).find("td").eq(index - 1).css("display", "none");
        }
    }

    //行之间的切换位置
    this.ChangeTrPosition = function (indexStart, indexEnd) {
        var temp1 = GetTrByIndex(obj, indexStart);
        var temp2 = GetTrByIndex(obj, indexEnd);
        if (temp1 == null || temp2 == null) {
            alert("超出索引!");
            return;
        }
        else {
            var arrTrObj = new Array();
            $(obj).find("tr").each(function () {
                arrTrObj.push($(this));
                //删除所有的tr
                $(this).remove();
            })

            arrTrObj.splice(indexStart, 1, temp2);
            arrTrObj.splice(indexEnd, 1, temp1);

            for (var i = 0; i < arrTrObj.length; i++) {
                $(obj).append(arrTrObj[i]);
            }
        }
    }

    //合并单元格,TR和TD的索引都是从0开始
    this.MergerCell = function (stratTrIndex, stratTdIndex, endTrIndex, endTdIndex) {
        var temp1 = endTdIndex - stratTdIndex;
        var temp2 = endTrIndex - stratTrIndex;
        var obj1 = GetTdByIndex(obj, stratTrIndex, stratTdIndex);
        var obj2 = GetTdByIndex(obj, endTrIndex, endTdIndex);
        if (obj1 == null || obj2 == null) {
            alert("单元格不存在!");
            return;
        }

        var arrtemp = new Array();
        //行的合并
        if (stratTrIndex == endTrIndex) {
            if (temp1 == 1 || temp1 == -1) {
                Merger(obj1, obj2, "colSpan");
            }
            else {
                alert("行,不能合并!");
                return;
            }
        }
        //列的合并
        if (stratTdIndex == endTdIndex) {
            if (temp2 == 1 || temp2 == -1) {
                Merger(obj1, obj2, "rowSpan");
            }
            else {
                alert("列,不能合并!");
                return;
            }
        }
    }

    //添加表头
    this.AddCell = function (value) {
        var objTr = GetTrByIndex(obj, 0);
        $(objTr).append("<td>" + value + "</td>");
    }


    //根据索引添加列  索引从0开始  如果索引为空，默认添加到最后  ----只添加表头
    this.AddCellByIndex = function (value, index) {
        var objTr = GetTrByIndex(obj, 0);
        if (index == "") {
            alert("请确定添加的位置!");
            return;
        }

        var objTd = $("<td>" + value + "</td>");

        var tempArr = new Array();

        $(objTr).children().each(function () {
            tempArr.push($(this));
            $(this).remove();
        })
        tempArr.splice(index, 0, objTd);

        for (var i = 0; i < tempArr.length; i++) {
            $(objTr).append(tempArr[i]);
        }
    }

    //根据索引删除列  索引从0开始
    this.DelCellByIndex = function (index) {
        $(obj).find("tr").each(function () {
            $(this).find("td").each(function (i) {
                if (i == index) {
                    $(this).remove();
                }
            })
        })
    }

    //切换列的位置   --- 索引从0开始
    this.ChangeTdPosition = function (indexStart, indexEnd) {
        var tempCellCount = $(obj).find("tr:eq(0)").find("td").length;

        if (indexStart >= tempCellCount || indexEnd >= tempCellCount) {
            alert("结束部分超出索引!");
            return;
        }
        //取得所有的td放在数组里
        $(obj).find("tr").each(function () {
            var tempTrArr = new Array();
            $(this).find("td").each(function () {
                tempTrArr.push($(this));
            })

            var temp1 = tempTrArr[indexStart];
            var temp2 = tempTrArr[indexEnd];

            tempTrArr.splice(indexStart, 1, temp2);
            tempTrArr.splice(indexEnd, 1, temp1);

            $(this).remove();

            for (var i = 0; i < tempTrArr.length; i++) {
                $(this).append(tempTrArr[i]);
            }

            $(obj).append($(this));
        })
    }

    //寻找值为text的TD,并标记为css样式
    this.FindSpecialTD = function (text, css) {
        var tempArr = new Array();

        $(obj).find("tr").each(function () {
            $(this).find("td").each(function () {
                if ($(this).text() == text) {
                    tempArr.push($(this));
                    $(this).attr("class", css);
                }
            })
        })

        if (tempArr.length == 0) {
            alert("没有找到值为:[" + text + "]的单元格!");
        }
    }
}

//处理数组和列数
function ControlCells(arrHtml, tempCellCount) {
    if (tempCellCount == 0) {
        alert("请先添加表头!");
        return false;
    }
    //如果数组的长度大于列数，那么提示报错
    if (arrHtml.length > tempCellCount) {
        alert("添加的列的HTML数组不能大于列的总数!");
        return false;
    }
    //如果数组的长度小于列数，那么补充空进去
    if (arrHtml.length <= tempCellCount) {
        var _num = tempCellCount - arrHtml.length;
        for (var i = 0; i < _num; i++) {
            arrHtml.push("null");
        }
        return true;
    }
}

//处理添加和删除索引
function ControlIndex(index, tempTrCount) {
    if (index == 0 || index == "") {
        alert("不允许更改表头!");
        return false;
    }
    if (index > tempTrCount) {
        alert("超出索引范围!");
        return false;
    }
    else {
        return true;
    }
}

//根据索引取得TR对象 索引从0开始
function GetTrByIndex(obj, index) {
    var temp = null;
    $(obj).find("tr").each(function (i) {
        if (index == i) {
            temp = $(this);
        }
    })
    return temp;
}

//根据tr和td的索引找到td对象
function GetTdByIndex(obj,trIndex, tdIndex) {
    var tempTr = null;
    var tempTd = null;
    $(obj).find("tr").each(function (i) {
        if (trIndex == i) {
            tempTr = $(this);
        }
    })
    $(tempTr).find("td").each(function (j) {
        if (tdIndex == j) {
            tempTd = $(this);
        }
    })
    return tempTd;
}

function Merger(obj1, obj2, tag) {
    //TD里面没有子元素,那么取出他的HTML值
    var arrtemp = new Array();
    var obj2HTML = $(obj2).text()
    if ($(obj2).children().length == 0) {
        arrtemp.push(obj2HTML);
        $(obj2).remove();

        $(obj1).append(" , " + obj2HTML);
        $(obj1).attr(tag, 2);
    }
    else {
        //取出里面的DOM对象
        $(obj2).children().each(function () {
            arrtemp.push($(this));
        })
        //移除td
        $(obj2).remove();
        //添加到另外的td里面
        $(obj1).append(" , " + obj2HTML);
        for (var i = 0; i < arrtemp.length; i++) {
            $(obj1).append(arrtemp[i]);
        }
        //设置td位跨2行
        $(obj1).attr(tag, 2);
    }
}